package me.spring.cloud.common.components.oss.cloud.aliyun;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.internal.OSSHeaders;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.StorageClass;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import me.spring.cloud.common.components.oss.cloud.OssCloudConfig;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @description: 阿里云oss配置
 * @author: luffy
 * @create: 2018-08-22 09:43
 **/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AliyunCloudConfig implements OssCloudConfig {

  private static final long serialVersionUID = -182956248635311281L;

  /** 阿里云绑定的域名 */
  private String domain;
  /** 阿里云路径前缀 */
  private String prefix;
  /** 阿里云EndPoint */
  private String aliyunEndPoint;
  /** 阿里云AccessKeyId */
  private String aliyunAccessKeyId;
  /** 阿里云AccessKeySecret */
  private String aliyunAccessKeySecret;
  /** 阿里云BucketName */
  private String bucketName;

  public static void main(String[] args) throws FileNotFoundException {
    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1（杭州）为例，Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
    String accessKeyId = "LTAI4G8FcAAAchPK7tx6JFcX";
    String accessKeySecret = "C92RpZwUzgIh8gWR4COYk7qGPE6yHa";

// 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 创建PutObjectRequest对象。
// 填写Bucket名称、Object完整路径和本地文件的完整路径。Object完整路径中不能包含Bucket名称。
// 如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件。
    PutObjectRequest putObjectRequest = new PutObjectRequest(
        "aaafffccc", "mhyzt5.html",
        new File("/Users/luffy/Downloads/过审官网/mhyzt.html"));

// 如果需要上传时设置存储类型和访问权限，请参考以下示例代码。
 ObjectMetadata metadata = new ObjectMetadata();
 metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
 metadata.setHeader(OSSHeaders.OSS_OBJECT_TYPE, "Normal");
 metadata.setHeader("x-oss-force-download", "false");
 metadata.setHeader("Content-Disposition", "");

 //metadata.setObjectAcl(CannedAccessControlList.Private);
 putObjectRequest.setMetadata(metadata);

// 上传文件。
    ossClient.putObject(putObjectRequest);

// 关闭OSSClient。
    ossClient.shutdown();
  }
}
